Before the proliferation of storage area networks (SANs), the Small Computer Systems Interface (SCSI) protocol was one method of communication between computer systems and devices. The development of SCSI increased the number of devices (printers, disk drives, tapes, and other peripheral devices) that could be used by a computer system by defining a bus so that several devices could be chained together into a channel and controlled from a single I/O channel controller. Bus-oriented I/O channels improved the amount of storage capacity that could be supported by a single server computer system and enabled a single pool of storage to be used for a number of different applications hosted by that server computer system.
Using SCSI, physical interfaces from computer systems to storage were parallel channels supporting a small number of SCSI devices. However, parallel SCSI imposed physical limitations on the number of devices that could be supported by the bus, as well as limitations on the amount of distance that could separate a device from its respective host. These limitations restricted the size to which networks sharing storage devices could grow, and other technologies were developed to decouple storage capacity from host servers. Today, technologies such as fibre channel and infiniband allow storage to exist in storage area networks (SANs), where a virtually unlimited number of storage devices can be shared by a virtually unlimited number of nodes without limitations on the amount of distance separating the nodes from the storage devices.
A SAN typically includes a network of multiple servers and connected storage devices. Generally, a client computer system requests a server hosting a given application to store data. The application server stores the data on behalf of the client and retrieves the data upon request by the client. If sufficient storage space is not available to the application server to store the data, the application server requests a storage server to allocate additional storage devices that the application server can use to store the data on behalf of the client. While SANs provide access to almost unlimited storage for distributed nodes, SANs introduce the complexity of managing a very large number of devices. In most large environments, these devices are likely to be produced by different manufacturers and configured for operation under different operating systems and in accordance with different formats and/or protocols. Furthermore, because many nodes may be capable of storing data on a single disk, there is a need for access control and coordination between nodes to use the storage devices effectively.
When a request for storage devices is made by a node, the storage server typically searches for free space on storage devices on the SAN. When sufficient free space to store the data is located, the disks containing that free space are allocated to the requesting node. Allocating a disk to a node involves enabling the node to access the disk (which is sometimes also referred to as establishing a connection between the node and the disk, making the disk available to the node, or granting the node access to the disk). Enabling the node to access the disk is an expensive process; for example, changes to many configuration files of servers, switches, and storage arrays on the SAN may be necessary, and interrelationships between these configuration files must be preserved. Typically, once access to the disk is granted to the node, the node determines information such as the type of the disk, format of the disk, and disk signature. However, the disk allocated to the node may have a type, format, or signature that is incompatible with the node, such that the resources used in enabling the node to access the disk have been wasted.
When a device is moved from one location to another on a SAN, such as from one node to another, traditionally it has been difficult to ascertain whether the device is new or whether the device has been moved. If the disk contains data, and the disk is allocated to an incompatible node, the incompatible node is unlikely to recognize that data are present and may reformat the disk or overwrite the existing data. To solve this problem, information such as the type, format, and signature of the device are needed prior to allocating the disk to a particular node for data storage. Previously, no mechanism existed to determine whether information about the device is already known.
What is needed is the knowledge whether a storage device on a SAN is compatible with a node prior to allocating the storage device to the node for data storage. Such a capability is needed for all types of storage devices, including storage arrays with groups of disks as well as unorganized individual disks (also referred to as JBOD (just a bunch of disks)). Once information about the storage device has been determined, the information should be made available to other nodes on the SAN. For example, preferably the information can be stored in a persistent data store on the SAN.